package br.com.werp.regras.acesso;

import br.com.werp.regras.acesso.controle.ControleAcesso;
import br.com.werp.regras.acesso.controle.ControleEmpresa;
import br.com.werp.regras.acesso.controle.ControleRole;
import br.com.werp.regras.acesso.controle.ControleSenha;
import br.com.werp.regras.acesso.controle.ControleSetor;
import br.com.werp.regras.acesso.controle.ControleUsuario;
import br.com.werp.regras.geral.Acesso;
import br.com.werp.regras.geral.ErroPadrao;
import br.com.werp.regras.geral.GerenciadorErros;
import br.com.werp.regras.geral.vos.tabelas.Usuario;

import java.util.List;


/**
 * @author Sobreira
 * Criado em 05/04/2005
 *
 */
public class AcessoImpl implements Acesso {
    private static AcessoImpl acessoImpl;
    private ControleEmpresa controleEmpresa = new ControleEmpresa();
    private ControleRole controleRole = new ControleRole();
    private ControleUsuario controleUsuario = new ControleUsuario();
    private ControleAcesso controleAcesso = new ControleAcesso();
    private ControleSetor controleSetor = new ControleSetor();
    private ControleSenha controleSenha = new ControleSenha();

    private AcessoImpl() {
    }

    public static AcessoImpl getAcessoImpl() {
        if (acessoImpl == null) {
            acessoImpl = new AcessoImpl();
        }

        return acessoImpl;
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Suporte#obterEmpresas(java.lang.String)
     */
    public List obterEmpresas(String usuarioLogin) throws ErroPadrao {
        try {
            return controleEmpresa.obterEmpresas(usuarioLogin);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Suporte#removerRoles(java.lang.String, java.lang.String, java.lang.String[])
     */
    public void removerRoles(String requisitor, String usuario, String[] roles)
        throws ErroPadrao {
        try {
            controleRole.removerRoles(requisitor, usuario, roles);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Suporte#inserirRoles(java.lang.String, java.lang.String, java.lang.String[])
     */
    public void inserirRoles(String requisitor, String usuario, String[] roles)
        throws ErroPadrao {
        try {
            controleRole.inserirRoles(requisitor, usuario, roles);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Suporte#obterRoles(java.lang.String)
     */
    public List obterRoles(String usuario) throws ErroPadrao {
        try {
            return controleRole.obterRoles(usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Suporte#obterRolesDisponiveis(java.lang.String)
     */
    public List obterRolesDisponiveis(String usuario) throws ErroPadrao {
        try {
            return controleRole.obterRolesDisponiveis(usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Acesso#manterListEmpresaSetorUsuario(java.lang.Object, java.util.List)
     */
    public void manterListEmpresaSetorUsuario(Object form, List list)
        throws ErroPadrao {
        try {
            controleEmpresa.manterListEmpresaSetorUsuario(form, list);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Acesso#obterEmpresaSetor(java.lang.String)
     */
    public List obterEmpresaSetor(String usuario) throws ErroPadrao {
        try {
            return controleEmpresa.obterEmpresaSetor(usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void persistirUsuario(Object form, List empresaSetor,
        String requisitor, List roles) throws ErroPadrao {
        try {
            controleUsuario.persistirUsuario(form, empresaSetor, requisitor,
                roles);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public boolean verificaUsuarioLogado(Usuario usuario)
        throws ErroPadrao {
        try {
            return controleAcesso.verificaUsuarioLogado(usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public List pesquisarUsuarios(Object form) throws ErroPadrao {
        try {
            return controleUsuario.pesquisarUsuarios(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void carregarUsuario(Object form) throws ErroPadrao {
        try {
            controleUsuario.carregarUsuario(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void inserirSetor(Object form, String requisitor)
        throws ErroPadrao {
        try {
            controleUsuario.inserirSetor(form, requisitor);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Acesso#pesquisarSetorEmpresa(java.lang.Object)
     */
    public List pesquisarSetorEmpresa(Object form) throws ErroPadrao {
        try {
            return controleSetor.pesquisarSetorEmpresa(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Acesso#alterarSenha(java.lang.Object, java.lang.String, java.lang.String)
     */
    public int alterarSenha(Object form, String usuario, String numTentativas)
        throws ErroPadrao {
        try {
            return controleSenha.alterarSenha(form, usuario, numTentativas);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void carregarRoleUrl(Object form, List roleUrl)
        throws ErroPadrao {
        try {
            controleRole.carregarRoleUrl(form, roleUrl);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void manterListaRoleUrl(Object form, List roleUrls)
        throws ErroPadrao {
        try {
            controleRole.manterListaRoleUrl(form, roleUrls);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void salvarRoleUrl(Object form, List roleUrls, String usuario)
        throws ErroPadrao {
        try {
            controleRole.salvarRoleUrl(form, roleUrls, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void carregarSetor(Object form) throws ErroPadrao {
        try {
            controleSetor.carregarSetor(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void excluirSetor(Object form, String usuario)
        throws ErroPadrao {
        try {
            controleSetor.excluirSetor(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public List pesquisarSetor(Object form) throws ErroPadrao {
        try {
            return controleSetor.pesquisarSetor(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void salvarSetor(Object form, String usuario)
        throws ErroPadrao {
        try {
            controleSetor.salvarSetor(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }
}
